<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body>
    <script>
        //（1）处理四个不同格式的日期，假如期望过滤掉第四个
        var regex = /\d{4}(-|\/|\.|)\d{2}(-|\/|\.|)\d{2}/;
        var string1 = '2017-06-12';
        var string2 = '2017/06/12';
        var string3 = '2017.06.12';
        var string4 = '2017-06/12';
        console.log(regex.test(string1)); //true
        console.log(regex.test(string2)); //true
        console.log(regex.test(string3)); //true
        console.log(regex.test(string4)); //true
        //（1-1）此时，我们使用反向引用的方法，针对第四个
        var regex1 = /\d{4}(-|\/|\.|)\d{2}\1\d{2}/;
        console.log(regex1.test(string3)); //true
        console.log(regex1.test(string4)); //false   此处是有\2,\3,\4等的应用的
        //（1-2）反向引用和小括号嵌套问题
        var stringNum = "1231231233";
        var regexNum = /^((\d)(\d(\d)))\1\2\3\4$/;
        console.log(regexNum.test(stringNum)); //true
        console.log(RegExp.$1); //123
        console.log(RegExp.$2); //1
        console.log(RegExp.$3); //23
        console.log(RegExp.$4); //3
        //（1-3）反向引用和小括号嵌套问题
        //    当我们需要匹配\1和0的时候，可以使用非捕获括号
        //书写方式为（?:\1）0或者\1(?:0)；
        //（1-4）引用不存在的分组的时候，匹配反向引用符本身，比如\2,就会去匹配"\2";
        var regexIndex = /\1\2\3\4\5\6\7/;
        console.log(regexIndex.test('\1\2\3\4\5\6\7')); //true
        console.log('\1\2\3\4\5\6\7'.split(''));
        //（1-5）分组后面有量词的情况
        //【注意】分组后面有量词的话，分组最终捕获到的数据是最后一次的匹配。
        var regexWord1 = /(\d)+/;
        var strWord = '12345';
        //未使用反向引用时候，分组有量词，内部分组1，是最终捕获到的最后一次的匹配
        console.log(strWord.match(regexWord1)); //["12345", "5", index: 0, input: "12345"]
        //以上同样适用于反向引用
        var regexWord2 = /(\d)+ \1/; //此处有一个空格，注意一下
        console.log(regexWord2.test('12345 1')); //false
        console.log(regexWord2.test('12345 5')); //true
        //（1-6）非捕获小括号的概念，当我们不想让小阔好被引用，可以使用非捕获括号
        var regex9 = /(?:ab)+/g;
        var string9 = "ababa abbb ababab";
        console.log(string9.match(regex9)); //["abab", "ab", "ababab"]
    </script>
</body>

</html>